/**
 * @file ContPlannerBase.hpp
 * @brief Base class for contingent planners
 * @date 2024-2-26
 * @version 0.0.1
*/

#ifndef __CONT_PLANNER_BASE_HPP__
#define __CONT_PLANNER_BASE_HPP__

#include <string>
#include <vector>
#include <memory>
#include <optional>

#include "contbtsys_core/contbtsys_ds.hpp"

namespace ContBTSys {
    class ContPlannerBase {
    public:
        ContPlannerBase() {}
        virtual ~ContPlannerBase() {}

        /**
         * @brief Use contingent-ff planner to get a plan, and convert it into a plan tree.
         * @param domain The path of domain file
         * @param problem The path of problem file
         * @param node_namespace The namespace of the node, default is ""
        */
        virtual RootPtr getPlan(
            const std::string & domain, const std::string & problem,
            const std::string & node_namespace = "") = 0;
        
        using ContPlannerBasePtr = std::shared_ptr<ContPlannerBase>;
    };
}

#endif // __CONT_PLANNER_BASE_HPP__